Tools that create information/data processing flows have become useful in enabling enterprise analysts and developers to create applications to respond to immediate enterprise needs. Existing tools generally require the following steps: creating applications as information processing flows from sets of data sources and components; based on the created or generated flow, assembling the executable application to run the flow (assembly system); and deploying the application to one or multiple execution environments (deployment system).
Existing tools make the assumption that each such flow, be it manually created or automatically generated, is an independent entity from other flows created in the past by the same user or group of users. This assumption, however, does not hold for two very common scenarios:
(i) components that have special resource (central processing unit (CPU)/memory) requirements and therefore should be shared between multiple flows. For example, a component that holds an in-memory database of special phone numbers and performs lookups against this database to determine if a phone call requires special handling (for example, toll-free or special toll calls);
(ii) components that have to gather data from multiple sources and maintain results/state based on their input data. For instance, a component that computes a price volatility index for stock prices in a given area for a long period of time (for example, a week or a month).
For either type of component described above, it would be desirable, in contrast to the existing approaches, for the creation of a new processing flow using this component, in many situations, to connect to the component if it is already running, instead of executing a new copy of the component.